package com.java46.struts2.base.util;

import java.util.UUID;
import java.security.MessageDigest;


/**
 * @ClassName SqlUtils
 * @Description sql工具类
 * @Author zuxia
 * @Date 2018/7/18 17:10
 * @Vcrsion 1.0
 **/
public class SqlUtils {


    /**
    *@Author xiao
    *@Description //生成订单号
    *@Date 11:12 2018/7/19
    *@Param [machineId]
    *@return java.lang.String
    */
    public static String getOrderIdByUUId(String machineId) {

        int hashCodeV = UUID.randomUUID().toString().hashCode();
        if (hashCodeV < 0) {//有可能是负数
            hashCodeV = -hashCodeV;
        }
        // 0 代表前面补充0
        // 4 代表长度为4
        // d 代表参数为正数型
        String orderId=machineId + String.format("%015d", hashCodeV);
        //System.out.println(orderId);
        return orderId;
    }

    /**
    *@Author xiao
    *@Description //MD5加密
    *@Date 10:47 2018/7/19
    *@Param [string]
    *@return java.lang.String
    */
    public static String md5encrypt(String string) {
        String md5str = "";
        string += "xiangxiaobo"; // 加盐
        try {
            // 1 创建一个提供信息摘要算法的对象，初始化为md5算法对象
            MessageDigest md = MessageDigest.getInstance("MD5");

            // 2 将消息变成byte数组
            byte[] input = string.getBytes();

            // 3 计算后获得字节数组,这就是那128位了
            byte[] buff = md.digest(input);

            // 4 把数组每一字节（一个字节占八位）换成16进制连成md5字符串
            md5str = bytes2Hex(buff);

        } catch (Exception e) {
            e.printStackTrace();
        }
        return md5str;
    }

    /**
     * 将byte数组转为16进制
     * @param src
     * @return
     */
    public static String bytes2Hex(byte[] src){
        char[] res = new char[src.length*2];
        final char hexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
        for(int i=0,j=0; i<src.length; i++){
            res[j++] = hexDigits[src[i] >>>4 & 0x0f];
            res[j++] = hexDigits[src[i] & 0x0f];
        }

        return new String(res);
    }

}
